package protect.week03;

import java.util.ArrayList;

/**
 * @author thinkpad - 83start
 * @version v1.0
 * @create 2022/9/16 15:07
 * @package protect.week03
 * @description 4. 寻找两个正序数组的中位数
 *
 * 给定两个大小分别为 m 和 n 的正序（从小到大）数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
 *
 * 算法的时间复杂度应该为 O(log (m+n)) 。
 *
 *  
 *
 * 示例 1：
 *
 * 输入：nums1 = [1,3], nums2 = [2]
 * 输出：2.00000
 * 解释：合并数组 = [1,2,3] ，中位数 2
 * 示例 2：
 *
 * 输入：nums1 = [1,2], nums2 = [3,4]
 * 输出：2.50000
 * 解释：合并数组 = [1,2,3,4] ，中位数 (2 + 3) / 2 = 2.5
 *  
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/median-of-two-sorted-arrays
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */

public class Ch04_FindMedianSortedArrays {
    public static double findMedianSortedArrays(int[] nums1, int[] nums2) {
        // 采用二路并归的算法合并两个数组
        int i = 0;
        int j = 0;
        ArrayList<Integer> c = new ArrayList<>();


        while (i < nums1.length && j < nums2.length) {
            if (nums1[i] < nums2[j]) {
                c.add(nums1[i++]);
            } else {
                c.add(nums2[j++]);
            }
        }

        while (i < nums1.length) {
            c.add(nums1[i++]);
        }

        while (j < nums2.length) {
            c.add(nums2[j++]);
        }

        // 求中位数
        if (c.size() % 2 == 0) {
            return (c.get(c.size() / 2) + c.get(c.size() / 2 - 1)) / 2.0;
        } else {
            return (c.get(c.size() / 2));
        }

    }

    public static void main(String[] args) {
        int[] a ={1,2};
        int[] b ={3,4};

        System.out.println(findMedianSortedArrays(a, b));

        System.out.println(5/2.0);
    }
}